﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CreditoAutorizado.Dados.Entidades;
using NHibernate;
using NHibernate.Criterion;

namespace CreditoAutorizado.CamadaAcessoDadosNH
{
    
    public class RepositorioCliente
    {
        public Cliente Inserir(Cliente cliente)
        {
            GerenciadorBD.Instance.SessaoAtual().Save(cliente);
            return cliente;
        }

        public Cliente Atualizar(Cliente cliente)
        {
            Cliente tmpCliente = new Cliente();
            tmpCliente = ObterPorId(cliente.ClienteId);

            tmpCliente.Bairro = cliente.Bairro;
            tmpCliente.Celular = cliente.Celular;
            tmpCliente.Cidade = cliente.Cidade;
            tmpCliente.Cpf = cliente.Cpf;
            tmpCliente.DataCadastro = cliente.DataCadastro;
            tmpCliente.Email = cliente.Email;
            tmpCliente.Estado = cliente.Estado;
            tmpCliente.Nome = cliente.Nome;
            tmpCliente.Numero = cliente.Numero;
            tmpCliente.Rua = cliente.Rua;
            tmpCliente.Usuario = cliente.Usuario;
            tmpCliente.Telefone = cliente.Telefone;
                         
            GerenciadorBD.Instance.SessaoAtual().Update(tmpCliente);
            return tmpCliente;
        }

        public void Excluir(Cliente cliente)
        {
            GerenciadorBD.Instance.SessaoAtual().Delete(cliente);
        }

        public IList<Cliente> ObterTodos()
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Cliente));
            return criteria.List<Cliente>() as List<Cliente>;
        }

        public Cliente ObterPorId(int id)
        {
            return GerenciadorBD.Instance.SessaoAtual().Get<Cliente>(id);
        }

        public IList<Cliente> ObterClientePorDados(string dados) 
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Cliente))
                    .Add(Restrictions.Or(Restrictions.Like("Nome",dados,MatchMode.Anywhere),Restrictions.Or(Restrictions.Eq("Telefone",dados), 
                    Restrictions.Or(Restrictions.Eq("Cpf",dados),Restrictions.Or(Restrictions.Eq("Celular",dados),Restrictions.Eq("Email",dados))))));


            return criteria.List<Cliente>() as List<Cliente>;
        }

        public IList<Cliente> ObterClientePorDadosEUsuario(string dados, Usuario usuario)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Cliente))
                    .Add(Restrictions.Eq("Usuario",usuario))
                    .Add(Restrictions.Or(Restrictions.Like("Nome", dados, MatchMode.Anywhere), Restrictions.Or(Restrictions.Eq("Telefone", dados),
                    Restrictions.Or(Restrictions.Eq("Cpf", dados), Restrictions.Or(Restrictions.Eq("Celular", dados), Restrictions.Eq("Email", dados))))));


            return criteria.List<Cliente>() as List<Cliente>;
        }
    }
}
